]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
remoteSearch: Do filtering here of providers here
authorJasper St. Pierre <jstpierre@mecheye.net>
Sat, 2 Nov 2013 22:03:52 +0000 (18:03 -0400)
committerJasper St. Pierre <jstpierre@mecheye.net>
Sun, 3 Nov 2013 00:07:06 +0000 (20:07 -0400)
We already do ordering at load time, so why not filtering?

js/ui/remoteSearch.js
js/ui/search.js

index dd2928fc432ddb391d1bdda8e3e45f033a1aabfe..520d109abe318113515b2454f9d678975b765ce0 100644 (file)
@@ -62,7 +62,7 @@ const SearchProvider2Iface = '<node> \
 var SearchProviderProxyInfo = Gio.DBusInterfaceInfo.new_for_xml(SearchProviderIface);
 var SearchProvider2ProxyInfo = Gio.DBusInterfaceInfo.new_for_xml(SearchProvider2Iface);
 
-function loadRemoteSearchProviders(addProviderCallback) {
+function loadRemoteSearchProviders(callback) {
     let objectPaths = {};
     let loadedProviders = [];
 
@@ -116,6 +116,12 @@ function loadRemoteSearchProviders(addProviderCallback) {
         }
     }
 
+    let searchSettings = new Gio.Settings({ schema: Search.SEARCH_PROVIDERS_SCHEMA });
+    if (searchSettings.get_boolean('disable-external')) {
+        callback([]);
+        return;
+    }
+
     let dataDirs = GLib.get_system_data_dirs();
     dataDirs.forEach(function(dataDir) {
         let path = GLib.build_filenamev([dataDir, 'gnome-shell', 'search-providers']);
@@ -134,12 +140,17 @@ function loadRemoteSearchProviders(addProviderCallback) {
         }
     });
 
-    let searchSettings = new Gio.Settings({ schema: Search.SEARCH_PROVIDERS_SCHEMA });
     let sortOrder = searchSettings.get_strv('sort-order');
 
     // Special case gnome-control-center to be always active and always first
     sortOrder.unshift('gnome-control-center.desktop');
 
+    loadedProviders = loadedProviders.filter(function(provider) {
+        let appId = provider.appInfo.get_id();
+        let disabled = searchSettings.get_strv('disabled');
+        return disabled.indexOf(appId) == -1;
+    });
+
     loadedProviders.sort(function(providerA, providerB) {
         let idxA, idxB;
         let appIdA, appIdB;
@@ -170,7 +181,7 @@ function loadRemoteSearchProviders(addProviderCallback) {
         return (idxA - idxB);
     });
 
-    loadedProviders.forEach(addProviderCallback);
+    callback(loadedProviders);
 }
 
 const RemoteSearchProvider = new Lang.Class({
index dcaef41edb71660863478ec8ae8e3b67b449c7f6..b55b76a94784dd77b03893d6781731a978d6bd6f 100644 (file)
@@ -39,19 +39,6 @@ const SearchSystem = new Lang.Class({
         this._reloadRemoteProviders();
     },
 
-    _shouldUseSearchProvider: function(provider) {
-        // the disable-external GSetting only affects remote providers
-        if (!provider.isRemoteProvider)
-            return true;
-
-        if (this._searchSettings.get_boolean('disable-external'))
-            return false;
-
-        let appId = provider.appInfo.get_id();
-        let disable = this._searchSettings.get_strv('disabled');
-        return disable.indexOf(appId) == -1;
-    },
-
     addProvider: function(provider) {
         this._providers.push(provider);
         this.emit('providers-changed');
@@ -65,12 +52,10 @@ const SearchSystem = new Lang.Class({
             this._unregisterProvider(provider);
         }));
 
-        RemoteSearch.loadRemoteSearchProviders(Lang.bind(this, function(provider) {
-            if (!this._shouldUseSearchProvider(provider))
-                return;
-
-            this._registerProvider(provider);
+        RemoteSearch.loadRemoteSearchProviders(Lang.bind(this, function(providers) {
+            providers.forEach(Lang.bind(this, this._registerProvider));
         }));
+
         this.emit('providers-changed');
     },